<?php

declare(strict_types=1);

namespace Berlin\Spider;

use chorus\UnknownPropertyException;

/**
 * 结果
 * @method string getTitle
 * @method string getDescription
 * @method string getPrice
 * @method string getCurrency
 * @method array getVariants
 * @method array getImages
 * @method array getRawData
 * @author Verdient。
 */
class Result
{
    /**
     * @var string 商品标题
     * @author Verdient。
     */
    protected $title;

    /**
     * @var string 商品名称
     * @author Verdient。
     */
    protected $name;

    /**
     * @var string 商品描述图片
     * @author Verdient。
     */
    protected $descriptionImage;

    /**
     * @var string 商品价格
     * @author Verdient。
     */
    protected $price;

    /**
     * @var string 货币
     * @author Verdient。
     */
    protected $currency;

    /**
     * @var array 规格
     * @author Verdient。
     */
    protected $variants = [];

    /**
     * @var array 图片
     * @author Verdient。
     */
    protected $banner = [];

    /**
     * @var string 促销描述
     * @author Verdient。
     */
    protected $promotionText;

    /**
     * @var array 原始数据
     * @author Verdient。
     */
    protected $rawData = [];

    /**
     * @param array $data 数据
     * @author Verdient。
     */
    public function __construct($data)
    {
        $this->rawData = $data;
        $this->normalize();
    }

    /**
     * 格式化
     * @author Verdient。
     * 
     */
    protected function normalize()
    {
        foreach ($this->rawData as $name => $value) {
            if (property_exists($this, $name)) {
                $this->$name = $value;
            }
        }
    }

    /**
     * @param string $name
     * @author Verdient。
     */
    public function __get($name)
    {
        if (property_exists($this, $name)) {
            return $this->$name;
        }
        throw new UnknownPropertyException('Getting unknown property ' . $name);
    }
}
